they are missing in a few places.
Signed-off-by: Keir Fraser <keir@xensource.com>
switch_required = (this_cpu(curr_vcpu) != current);
if ( switch_required )
+ {
+ ASSERT(current == idle_vcpu[smp_processor_id()]);
__context_switch();
+ }
local_irq_restore(flags);
{
ack_APIC_irq();
perfc_incrc(ipis);
+ irq_enter();
if ( !__sync_lazy_execstate() )
{
if ( flush_va == FLUSHVA_ALL )
local_flush_tlb_one(flush_va);
}
cpu_clear(smp_processor_id(), flush_cpumask);
+ irq_exit();
}
void __flush_tlb_mask(cpumask_t mask, unsigned long va)
if ( !cpu_isset(smp_processor_id(), call_data->selected) )
return;
+ irq_enter();
+
if ( call_data->wait )
{
(*func)(info);
atomic_inc(&call_data->started);
(*func)(info);
}
+
+ irq_exit();
}
unsigned long addr, fixup;
int rc;
+ ASSERT(!in_irq());
+
__asm__ __volatile__ ("mov %%cr2,%0" : "=r" (addr) : );
DEBUGGER_trap_entry(TRAP_page_fault, regs);